/*
 * Copyright (c) 2025 CAX Conversion Project
 */
package com.comac.ins.isfd.service;

import java.io.IOException;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import org.springframework.web.multipart.MultipartFile;

import com.comac.ins.common.mybatis.core.page.PageQuery;
import com.comac.ins.common.mybatis.core.page.TableDataInfo;
import com.comac.ins.isfd.domain.bo.IsfdCalculationExampleBo;
import com.comac.ins.isfd.domain.vo.CalculationExampleCountObjectVo;
import com.comac.ins.isfd.domain.vo.CalculationExampleCountResultObjectVo;
import com.comac.ins.isfd.domain.vo.IsfdCalculationExampleVo;
import jakarta.servlet.http.HttpServletResponse;

/**
 * 算例库service层接口
 *
 * @author zhouyaoxin
 * @date 2024-7-11
 */
public interface IIsfdCalculationExampleService {

    /**
     * 算例数据数量
     *
     * @return 算例
     */
    List<CalculationExampleCountObjectVo> listCount();

    /**
     * 算例数据数量，字段查询
     *
     * @return 算例
     */
    List<CalculationExampleCountResultObjectVo> listCountByListByField(String field);

    /**
     * 创建时间数据数量
     *
     * @return 结果
     */
    List<CalculationExampleCountResultObjectVo> listTimeCount(String field, Date startTime, Date endTime);

    /**
     * 根据 CalculationExampId 从缓存或数据库中获取 IsfdCalculationExampleVo 对象
     *
     * @param resultId 算例库id
     * @return IsfdCalculationExampleVo 对象，包含文件信息
     */
    IsfdCalculationExampleVo getById(Long resultId);

    /**
     * 分页列表查询算例库
     *
     * @param isfdCalculationExampleBo OSS对象存储分页查询对象
     * @param pageQuery                分页查询实体类
     * @return 算例
     */
    TableDataInfo<IsfdCalculationExampleVo> queryPageList(IsfdCalculationExampleBo isfdCalculationExampleBo, PageQuery pageQuery);

    /**
     * 删除算例库
     *
     * @param ids     算例库id集合
     * @param isValid 判断是否需要校验
     * @return 算例
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 上传 MultipartFile 到对象存储服务，并保存文件信息到数据库
     *
     * @param file                     要上传的 MultipartFile 对象
     * @param isfdCalculationExampleBo 算例元信息
     * @return 上传成功后的 IsfdCalculationExampleVo 对象，包含文件信息
     */
    IsfdCalculationExampleVo save(MultipartFile file, IsfdCalculationExampleBo isfdCalculationExampleBo);

    /**
     * 文件下载方法，支持一次性下载完整文件
     *
     * @param resultId 算例库id
     * @param response HttpServletResponse对象，用于设置响应头和向客户端发送文件内容
     */
    void download(Long resultId, HttpServletResponse response) throws IOException;

    /**
     * 更新数据
     *
     * @param isfdCalculationExampleBo 更新信息
     * @return 更新成功后的 IsfdCalculationExampleVo 对象，包含文件信息
     */
    void update(IsfdCalculationExampleBo isfdCalculationExampleBo);


    /**
     * 判断算法是否上传算例文档
     *
     * @param analysisType 算法类型
     */
    Boolean checkIfExistCalculationExample(String analysisType);
}
